//
//  LZMHManager.h
//  LZMH_VOIP
//
//  Created by 肖忠肯 on 2017/5/2.
//  Copyright © 2017年 XIAMEN LIANZHANG. All rights reserved.
//

#ifndef __LZMHManager__
#define __LZMHManager__


#import <Foundation/Foundation.h>

typedef enum {
    RegStateUnregistered = 0,//注销
    RegStateSucceeded = 1,//注册成功
    RegStateFailed = 2,//注册失败
} RegisterState;


// 调用SDK返回值说明
//   0：成功
//  -1：失败
// -10: SDK未运行
// -11：SDK已经在运行中。
// -20：参数不正确
//-100：LOG名称不正确
//-101：LOG文件打开失败
//-102：LOG线程创建失败
//-200：创建失败
//-201：初始化失败
//-202：UDP传输创建失败
//-203：TCP传输创建失败
//-204：开始失败
//-205：挂机失败
//-206：未找到电话信息
//-207：应答失败
//-208：电话状态不正确
//-209：电话太多
//-210：未找到该账户
//-211：呼叫失败
//-212：销毁失败
//-213：设置数据失败
//-214：删除账户失败
//-215：账户ID不合法
//-216：账户注册失败
//-217：账户太多
//-218：账户添加失败
//-219：发送消息失败
//-220：发送DTMF失败
//-300：本地账户查找失败
//-301：本地账户添加失败
//-302：本地账户删除失败
//-303：本地账户太多
//-400：本地电话添加失败
//-401：本地电话查找失败


@protocol LzCallDelegate <NSObject>


/**
 sdk注册结果回调

 @param state 注册结果 RegisterState
 */
- (void)onRegisterState:(RegisterState)state;


/**
 sip来电回调
 @discussion 门禁设备发起呼叫后会自动拍照，由于来电事件和拍照是异步发生的，如果照片先于来电事件到达手机，来电事件到达后该代理方法会同时带上照片url;
 @param fromNumber 主叫号码
 @param identifier 门禁设备发起呼叫的时间戳  fromNumber+identifier可以唯一确定一通电话
 @param url 照片url
 */
- (void)onIncomingCall:(NSString *)fromNumber with:(NSString *)identifier photoURL:(NSURL *)url;


/**
 通话状态回调

 @param callState 0 断开, 1 接通
 */
- (void)onCallState:(int)callState;


/**
 sip消息回调

 @param message 消息
 
 照片消息
 @code
 {"content":"http://106.75.75.112:15210/callpic/2017/5/18/0b42a7625654484880657080165166941495088697108.jpg","pic_key":"2017/5/18/0b42a7625654484880657080165166941495088697108.jpg","msgType":6,"msgId":0}
 @endcode
 
 开门成功
 @code
 {"content":"","pic_key":"","msgType":4,"msgId":0}
 @endcode
 
 开门失败
 @code
 {"content":"","pic_key":"","msgType":5,"msgId":0}
 @endcode
 
 推送呼叫挂断
 @code
 {"messageID":"1495088688","msgType":7,"msgId":0}
 @endcode
 */
- (void)onReceiveMessage:(NSDictionary *)message from:(NSString *)number;

@end

@interface LZiDoor : NSObject

@property (nonatomic, weak) id<LzCallDelegate> delegate;


/**
 sdk主版本号

 @return 版本号
 */
+ (NSString *)mainVersion;


/**
 sdk次版本号

 @return 次版本号
 */
+ (NSString *)subVersion;


/**
 sdk初始化

 @return LzCall instance
 */
- (instancetype)init;


/**
 sdk初始化

 @param delegate 代理
 @return LzCall instance
 */
- (instancetype)initWithDelegate:(id <LzCallDelegate>)delegate;


/**
 添加帐号
 
 @param info 帐号信息
 @return sdk返回结果
 */
- (int)addAccount:(NSString *)info;


/**
 销毁服务

  @return sdk返回结果
 */
- (int)destroy;



/**
 SDK后台注册
 */
- (void)keepAlive;



/**
 SDK是否运行

 @return YES or NO
 */
- (BOOL)isRunning;




/**
 回呼

 @param callID 通话唯一标识
 @param sipGroupNum 呼叫对象SIP号
 @return 0成功 其他 失败
 */
- (int)makeCall:(NSString *)callID to:(NSString *)sipGroupNum;


/**
 接听
 
 @return sdk返回结果
 */
- (int)callAnswer;


/**
 设置免提
 
 @param state 开关 YES 打开 NO 关闭
 */
- (void)setSpeakerState:(BOOL)state;


/**
 获取免提状态
 
 */
- (BOOL)isSpeakerOn;


/**
 挂断
 @return sdk返回结果
 */
- (int)hangUp;


/**
 呼叫开门

 @param sipNumber 门禁设备sip号，传 nil 默认当前来电的设备
 @param login 用户标识
 @return sdk返回结果
 */
- (int)openDoor:(NSString *)sipNumber from:(NSString *)login;


/**
 门口机拍照

 @param sipNumber sipNumber 门禁设备sip号, 传 nil 默认当前门禁设备
 @param login 用户标识
 @return sdk返回结果
 */
- (int)takePhoto:(NSString *)sipNumber from:(NSString *)login;

@end

#endif
